from django.views import View
import random
import io
from django.http import HttpResponse
import redis

#绘制验证码图片
from PIL import Image
#画笔，传图片
from PIL import ImageDraw
#字体大小
from PIL  import ImageFont

from rest_framework.views import APIView



#建立redis连接
r = redis.Redis(host='127.0.0.1',port=6379)



#生成一张固定颜色，尺寸的图片
class Mycode2(View):
    #获取一个随机颜色
    def getRandomColor(self):
        c1 = random.randrange(255)
        c2 = random.randrange(255)
        c3 = random.randrange(255)
        return (c1,c2,c3)

    def get(self,request):
        #定义图片颜色，大小   获取一个 image对象，参数分别是RGB模式，size，颜色
        image = Image.new('RGB',(150,80),self.getRandomColor())
        #画笔  获取一个画笔对象，将图片对象传过去
        draw = ImageDraw.Draw(image,'RGB')
        #定义一个随机字符串
        source = '0123456789'
        #容器 用来接受随机字符串
        code_str = ''
        #定义验证码图片上有几个数字
        for i in range(4):
            #获取字体颜色
            text_color = self.getRandomColor()
            #获取字符串
            tmp_num = random.randrange(len(source))
            #获取字符集
            random_str = source[tmp_num]
            #添加到容器
            code_str += random_str
            #字体大小
            # font = ImageFont.truetype(random_str,size=10)
            #绘制 验证码，在图片上添加东西，参数是:定位，字符串，颜色，字体
            draw.text((10+30*i,20),random_str,text_color)
        #保存在硬盘，名为test.png 格式为pngtupian
        #文件流缓存区
        buf = io.BytesIO()
        #将图片保存到缓存区
        image.save(buf,'png')
        #将验证码添加到redis里
        # r.set('code',code_str)
        #添加得到session里 传给前端
        request.session['code'] = code_str
        return HttpResponse(buf.getbuffer(),'image/png')









